package com.ww.springboot.boot.javabase.intern;

/**
 * 概念:
 * 字符串池
 * 1.字符串相加的时候，都是静态字符串的结果会添加到字符串池
 * 2.其中含有变量则不会进入字符串池中
 * 3.intern()会先去字符串池中查找 找到则返回 找不到则创建对象并返回对象
 *
 * new String(不会进入字符串池，只会在堆中存在)
 *
 * 字符串池引用与对象引用
 *  对象赋值时有可能会放进字符串池
 *
 * @author wanwei
 * @since 2021-02-05 14:55
 */
public class StringDemo {

    public static void main(String[] args) {
        String a = "a";
        String b = "b";
        //字符串相加的时候，都是静态字符串的结果会添加到字符串池
        String ab2 = "a" + "b";
        String ab = new String("ab");

        //其中含有变量则不会进入字符串池中
        String ab1 = a + b;
        System.out.println(ab2.intern() == ab);
        System.out.println(ab2 == ab);
        //.intern 会先去<字符串池>拿  没有再去<堆>中拿
        System.out.println(ab1.intern() == ab1);
        System.out.println(ab1.intern() == ab2.intern());
        System.out.println(ab1.intern() == ab);
        String ab3 = new String("ab");
        System.out.println(ab3.intern() == ab3);
        System.out.println(ab1.intern() == ab3);
        System.out.println(ab == ab3);
        //相同的字符串 堆变量会有多个 但是池变量只有一个
        String ab4 = new String("ab");
        System.out.println(ab3 == ab4);
        System.out.println(ab3.intern() == ab4.intern());

    }
}
